package com.design01_builder.pattern01_singleton;

import java.io.Serializable;

/**
 * @ClassName singleton
 * @Description 单例模式-饿汉式
 *  在类加载期间初始化私有的静态实习,
 *  保证instance实例在创建过程是线程安全的
 *  特点:不支持延时加载,获取实例对象的速度比较快,但是对象比较大的话,
 *      一直没有使用的话,会造成内存浪费
 * @Author zhangjunhao
 * @DATE 2023/8/30 23:45
 */
public class Singleton01 implements Serializable {


    //1.私有构造方法
    private Singleton01() {
    }

    //2.在本类中创建私有静态的全局属性
    private static Singleton01 INSTANCE= new Singleton01();


    //3.提供一个全局的访问点
    public static Singleton01 getInstance(){
        if (INSTANCE == null) {
            synchronized (Singleton01.class) {
                if (INSTANCE == null) {
                    INSTANCE = new Singleton01();
                }
            }
        }
        return INSTANCE;
    }

    /**
     * 解决方案:只要在Singleton类中定义readResolve就可以解决该问题
     * 程序会判断是否有readResolve方法,如果存在就在执行该方法,如果不存在-
     -就创建一个对象
     */
    private Object readResolve() {
        return INSTANCE;
    }
}
